﻿/*----------------------------------------------------------------
//  <copyright file="IUserOrganizationStore.cs" company="MicroCloud@151504200868">
//      Copyright © 2020-2024 MicroCloud Corporation, All rights reserved.
//  </copyright>
//  <site>https://gitee.com/chenmm123/microclouds</site>
//  <last-editor>cmm</last-editor>
//  <last-date>2022-11-15 14:58</last-date>
//----------------------------------------------------------------*/

namespace MicroCloud.Identity
{
    #region "为将用户映射到组织机构的存储提供抽象"
    /// <summary>
    /// 为将用户映射到组织机构的存储提供抽象
    /// </summary>
    /// <typeparam name="TUser">用户实体类型</typeparam>
    public interface IUserOrganizationStore<TUser> : IUserStore<TUser>, IDisposable where TUser : class
    {
        #region "方法"
        #region "将指定的用户添加到组织机构"
        /// <summary>
        /// 将指定的用户添加到组织机构
        /// </summary>
        /// <param name="user">用户数据</param>
        /// <param name="orgId">组织机构编号</param>
        /// <param name="cancellationToken">用于传播应取消操作的通知</param>
        /// <returns><see cref="Task" />结果</returns>
        Task AddToOrganizationAsync(TUser user, string orgId, CancellationToken cancellationToken = new CancellationToken());
        #endregion
        #region "从组织机构中删除指定的用户"
        /// <summary>
        /// 从组织机构中删除指定的用户
        /// </summary>
        /// <param name="user">用户数据</param>
        /// <param name="orgId">组织机构编号</param>
        /// <param name="cancellationToken">用于传播应取消操作的通知</param>
        /// <returns><see cref="Task" />结果</returns>
        Task RemoveFromOrganizationAsync(TUser user, string orgId, CancellationToken cancellationToken = new CancellationToken());
        #endregion
        #region "获取指定用户所属的组织机构编号列表"
        /// <summary>
        /// 获取指定用户所属的组织机构编号列表
        /// </summary>
        /// <param name="user">用户数据</param>
        /// <param name="cancellationToken">用于传播应取消操作的通知</param>
        /// <returns>包含组织机构编号集合的<see cref="Task" />结果</returns>
        Task<IList<string>> GetOrganizationsAsync(TUser user, CancellationToken cancellationToken = new CancellationToken());
        #endregion
        #region "返回一个标志，指示指定的用户是否为给定组织机构的成员"
        /// <summary>
        /// 返回一个标志，指示指定的用户是否为给定组织机构的成员
        /// </summary>
        /// <param name="user">用户数据</param>
        /// <param name="orgId">组织机构编号</param>
        /// <param name="cancellationToken">用于传播应取消操作的通知</param>
        /// <returns>包含布尔值的<see cref="Task" />结果</returns>
        Task<bool> IsInOrganizationAsync(TUser user, string orgId, CancellationToken cancellationToken = new CancellationToken());
        #endregion
        #region "返回作为组织机构成员的用户列表"
        /// <summary>
        /// 返回作为组织机构成员的用户列表
        /// </summary>
        /// <param name="orgId">组织机构编号</param>
        /// <param name="cancellationToken">用于传播应取消操作的通知</param>
        /// <returns>包含用户集合的<see cref="Task" />结果</returns>
        Task<IList<TUser>> GetUsersInOrganizationAsync(string orgId, CancellationToken cancellationToken = new CancellationToken());
        #endregion

        #endregion

    }
    #endregion

}
